#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//1602显示模块信号输出的引脚编号
const int trig = 8; // 触发信号
const int echo = 9; // 反馈信号
const int inputPin = 10;//定义输入针脚
long lastbuttonstate =  LOW;//定义上次开关状态
long lastbuttontime = 0;//定义一个时间
long debouncetime = 50;//定义防抖动时间
long buttonstate ;//定义开关的现在的状态

void setup() { 
 lcd.begin(16, 2);
 pinMode(echo, INPUT); 
 pinMode(trig, OUTPUT); 
 //初始化触发端口设置为输出，反馈端口设置为输入
 //Serial.begin(9600); 
} 

void loop() { 
 int reading = digitalRead(inputPin);
 //10号引脚接受按键通断信息，下面为按键防抖动模块
if(reading != buttonstate)
  {
    long lastbuttontime = millis();
  }
    if( (millis()-lastbuttontime) > debouncetime)
    {
       if(reading != buttonstate)
      {
         reading = buttonstate;
        //下面是测距显示模块
        {
          lcd.clear();
          long IntervalTime=0; 
          digitalWrite(trig, 1);
          delayMicroseconds(15); 
          digitalWrite(trig, 0);
          IntervalTime=pulseIn(echo, HIGH);
          //用自带的函数采样反馈的高电平的宽度，单位 us 
          float S=IntervalTime/58.00; 
          //使用浮点计算出距离，单位 cm 
          lcd.setCursor(0,0);
          lcd.print("S: ");
          S = S + 0.5; 
          int s = S;
          //判断参数范围是否在2cm~2m之间
          if(s>=2 && s<=200)
          {
          lcd.print(s);
          lcd.setCursor(0,1);
          lcd.print("cm");
          }
          else
          {
            lcd.print("beyond the");
            lcd.setCursor(0,1);
            lcd.print("distance!");
          }
          //Serial.println(S);
          //通过串口输出距离数值，并且检验
          S=0;IntervalTime=0;
          
          //对应的数值清零。
          //delay(500);
        }   
         delay(1000);
         //延时间隔决定采样的频率和两次有效按键的间隔
      } 
     }
}
